#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void
print_frames (int access, int *frame, int num)
{
  printf ("Access:%d,Frames: [", access);
  for (int i = 0; i < num; i++)
    {
      printf ("%d", frame[i]);
      if (i < num - 1)
        printf (",");
    }
  printf ("]\n");
}

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  int head = 0;
  int *frame = (int *)malloc (num * sizeof (int));
  memset (frame, -1, num * sizeof (int));

  char *token = strtok (queue_frames, ",");
  while (token != NULL)
    {
      int access = atoi (token);
      int hit = 0;
      for (int j = 0; j < num; j++)
        if (frame[j] == access)
          {
            hit = 1;
            break;
          }
      if (hit == 0)
        {
          frame[head] = access;
          head = (head + 1) % num;
        }
      print_frames (access, frame, num);

      token = strtok (NULL, ",");
    }
  free (frame);
}